//
// Created by martin on 8/2/21.
//

#ifndef FTPSERVER2_0_CONFIG_H
#define FTPSERVER2_0_CONFIG_H

#include <netinet/in.h>
#include <stdbool.h>
#include <limits.h>
#include <unistd.h>

#define CTRL_PORT_DFL      21   /* 控制端口默认值 */
#define DATA_PORT_DFL      20   /* 数据端口默认值 */

#define CONFIG_FILE_NAME    "../ftpd.cfg"

typedef struct {
    char *p_name;
    char *p_value;
}ParseConf_Params_str;

typedef struct {
    char *p_name;
    bool *p_value;
}ParseConf_Params_bool;

typedef struct {
    char *p_name;
    int  *p_value;
}ParseConf_Params_int;

typedef struct {
    char *p_name;
    unsigned int *p_value;
}ParseConf_Params_uint;

typedef struct {
    char root_dir[NAME_MAX + 1]; /* FTP服务器根目录（物理路径） */

    bool PASV_mode_enable;    /* 使能PASV 模式 */
    bool PORT_mode_enable;    /* 使能PORT 模式 */
    int number_of_thread_max; /* 线程池子线程最大数目 */
    int number_of_client_max; /* 同时连接到服务器的客户端最大数目 */

    char ip[INET_ADDRSTRLEN]; /* 本机IPv4地址 */
    unsigned int ctrl_port;   /* 控制端口 */
    int ctrl_conn_time_out;   /* 控制连接超时时间 */
    unsigned int  data_port_PORT; /* 数据端口，用于PORT模式 */

    unsigned int  data_port_PASV_min; /* 数据端口最小值，用于PASV模式 */
    unsigned int  data_port_PASV_max; /* 数据端口最大值，用于PASV模式 */

    int data_conn_time_out;  /* 数据连接超时时间 */
}Tunable_Params_t;

int config_init();
void print_tunableParams();

const char *config_getIP();
unsigned int cofig_getCtrlPort();
unsigned int config_getDataPort();
int config_getNumberOfClientMax();
int config_getNumberOfThreadMax();
const char *config_getRootDir();

#endif //FTPSERVER2_0_CONFIG_H
